<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // Promise 是异步编程的新解决方案，语法上 Promise 是一个构造函数，用来封装异步操作
    // Promise 构造函数：Promise(excutor){}
    // Promise.prototype.then 方法
    // Promise.prototype.catch 方法


    // 实例化 Promise 对象，里面参数是两个函数：resolve, reject
    const p = new Promise(function (resolve, reject) {
      setTimeout(function () {
        // let data = '连接数据库成功'
        // resolve(data);   // 只要调用了 resolve 方法， Promise对象 p 就是成功状态，就会调用下面的 then 方法的第1个表示成功的回调函数

        let err = '连接数据库失败'
        reject(err);    // 只要调用了 reject 方法， Promise对象 p 就是失败状态，就会调用下面的 then 方法的第2个表示成功的回调函数
      }, 1000);
    });

    // 调用 Promise 对象的 then 方法
    const result = p.then(function (value) { // 调用成功的形参
      console.log(value);
    }, function (reason) {   // 调用失败的形参
      console.error(reason);
    });
    console.log(result);  // then 方法的返回值类型是  Promise 对象，所以then 方法可以链式写法

    // then 方法的链式写法
    p.then(function (value) {
      console.log("成功");
    }).then(function (value) {
      console.log("成功后再调用");
    }).then(function (value) {
      console.log("成功再再调用");
    }).catch(function (reason) {    // 以上任何一步出错都会直接到catch里面
      console.log("失败");
    })


  </script>
</body>

</html>